Telegram Group Search
Вакансии «Библиотеки программиста»

Привет! Мы ищем контент-менеджеров, которые будут вести наши телеграм-каналы о разработке.

👾 Требования:
— знать принципы залетающего контента
— разбираться в темах, связанных с разработкой

Большим плюсом будет навык программирования на каких-либо языках.

Условия:
— удаленка
— частичная занятость
— сдельная оплата в зависимости от количества задач

🔥 Оставляйте отклик, и мы свяжемся с вами: https://forms.gle/o4BZnsQ526JoqsCq9
🎁 Топ-вакансий для мобильных разработчиков за неделю

Android developer (senior) — удалёнка

Senior Fullstack Flutter Developer — от 300 000 ₽, удалёнка

Мобильный разработчик (Flutter/React Native) — удалёнка

Senior iOS Developer (Swift) — от 5 500 до 6 000 $, удалёнка

Android Developer — удалёнка

➡️ Еще больше топовых вакансий — в нашем канале Mobile jobs

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Эффективное управление ветками с помощью git rebase

Проблема: при работе с несколькими ветками в Git история коммитов может становиться запутанной из-за частых слияний, что усложняет анализ изменений.

Решение:
в книге "Mastering Git" автор показывает использование команды git rebase, которая позволяет линейно интегрировать изменения из одной ветки в другую, сохраняя историю чистой и понятной.

Пример кода:
# Переключаемся на ветку feature
git checkout feature

# Выполняем rebase на master
git rebase master

# Если возникают конфликты, разрешаем их и продолжаем rebase
git add <исправленные файлы>
git rebase --continue

# Переключаемся на master и сливаем изменения
git checkout master
git merge feature --ff-only


Преимущества:

— Чистая и линейная история изменений.
— Упрощение процесса ревью кода.
— Лёгкость в отслеживании изменений.

Еще больше полезных книг — в нашем канале @progbook

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
😡 А вас тоже бесят облачные сервисы?

Согласитесь, статус отношений с облаками — все сложно. Но что, если можно изменить правила игры?

Мы готовим нечто особенное в мире облачных технологий, но сначала хотим услышать правду от тех, кто реально работает с облаками каждый день.

Что мы хотим узнать:
— Для чего вы реально используете облако?
— Чего катастрофически не хватает прямо сейчас?
— Что бесит больше всего? (можно материться)
— Как выбираете провайдера — по цене или по любви?
— и тому подобное

По результатам опроса мы подготовим исследование без маркетингового мусора и вы узнаете, как обстоят дела у коллег.

️Время на опрос: меньше, чем на кофе-брейк. Жмите → https://clc.to/nboYDA
🛡 Как защитить API

В карточках разобрали шесть ключевых принципов защиты API, которые позволят снизить риски взлома, утечки данных и отказа в обслуживании.

➡️ Подробнее в статье

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
How to: внедряем Jetpack Compose в существующий проект

Хотите использовать современный Compose, но проект уже написан на XML-вёрстке? Разберём, как добавить Compose без переписывания всего кода.

1️⃣ Подготовка проекта

Добавьте зависимости в build.gradle:

android {  
buildFeatures {
compose true
}
}
dependencies {
implementation "androidx.compose.ui:ui:1.6.0"
implementation "androidx.compose.material:material:1.6.0"
}


2️⃣ Гибридный подход

Используйте ComposeView в XML-разметке:

<androidx.compose.ui.platform.ComposeView  
android:id="@+id/compose_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />


И настраивайте из кода:

findViewById<ComposeView>(R.id.compose_view).setContent {  
Text("Это Compose внутри старого XML!")
}


3️⃣ Постепенная миграция

🔘 Начинайте с новых экранов
🔘 Рефакторите простые элементы (кнопки, карточки)
🔘 Используйте Compose для сложных анимаций

4️⃣ Совместная работа View и Compose

Для взаимодействия между частями:

// View → Compose  
composeView.setContent {
MyComposeScreen(onClick = { /* обработка */ })
}

// Compose → View
AndroidView({ TextView(context) }) { view ->
view.text = "Текст из Compose"
}


Уже пробовали мигрировать на Compose? Делитесь опытом в комментариях 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Автоматизация тестирования мобильных приложений

Устали вручную проверять каждый сценарий? Этот промпт поможет настроить автотесты быстро и эффективно!

Промпт:
Create a complete test automation setup for mobile app with:
1. UI tests structure for Espresso (Android) / XCTest (iOS)
2. Page Object pattern implementation
3. Test data generation techniques
4. CI/CD integration examples
5. Reporting and screenshot on failure
Provide sample tests for login screen and main app flow.


📌 Уточнения:

🔘 Add flaky tests prevention techniques
🔘 Implement BDD approach with Cucumber
🔘 Compare Appium vs native frameworks
🔘 Add performance testing examples

💡 Cовет:

Используйте Explain how to mock backend responses для изолированного тестирования

Пример запроса:

// Нужно протестировать:
// - Успешный логин
// - Восстановление пароля
// - Основной функционал приложения
// - Обработку ошибок сети


Какие сценарии автоматизируете в первую очередь? Делитесь опытом в комментариях 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🌧️ Облачная терапия: время выговориться!

Знакомая ситуация? Покупаете облако как BMW, а получаете телегу с квадратными колесами. Обещают 99.9% uptime, а сервер падает на релизе. Техподдержка отвечает через сутки фразой «попробуйте перезагрузить».

Пора узнать, как обстоят дела с облаками на самом деле. Поэтому мы собираем ваши реальные истории про облачные сервисы.

🤫О чем спросим:
— Зачем вам вообще это облако нужно
— Какие косяки достали до печенок
— Сколько денег утекает в никуда ежемесячно
— Что должно случиться, чтобы вы сменили провайдера
— И еще пару каверзных вопросов

⏱️ 2 минуты честности = большое исследование без воды → https://clc.to/nboYDA
🔼 Делаем кастомный модификатор для границ

Граница в виде «марширующих муравьев» — распространенный элемент пользовательского интерфейса, используемый для обозначения «выбранного» элемента, но предоставляемый Compose модификатор border() не справляется с этой задачей.

Автор статьи создаст свой собственный. И по ходу дела вы узнаете многое о Paths, измерении путей, рисовании путей и эффектах.

👉 Читать статью

🐸 Библиотека мобильного разработчика

#свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🆒 5 трюков Jetpack Compose

1️⃣ Используйте rememberUpdatedState, чтобы избежать устаревших лямбд

Если вы передаете в Composable лямбду, которая может измениться, rememberUpdatedState гарантирует, что вы используете последнюю версию.

val updatedOnClick by rememberUpdatedState(newValue = onClick)
LaunchedEffect(Unit) {
delay(1000)
updatedOnClick()
}


Без этого Compose может вызвать старую версию лямбды, что приведет к ошибкам.

2️⃣ Не забывайте о pointerInput для кастомных жестов

Выйдете за пределы clickable — используйте перетаскивание, мультитач или собственное распознавание сложных жестов.

Modifier.pointerInput(Unit) {
detectTapGestures(
onLongPress = { /* do something */ }
)
}


Можно также обнаружить масштабирование с помощью щипков, смахивание или реализовать распознавание кастомных жестов.

3️⃣ Прокручивайте любой компонент с помощью Modifier.scrollable

Хотите прокрутить бокс или кастомный макет? Вам не нужно использовать LazyColumn или Column.

val scrollState = rememberScrollState()
Box(
Modifier
.height(200.dp)
.verticalScroll(scrollState)
) {
// Large content goes here
}


Также работает с горизонтальными прокрутками или вложенными скролами с помощью NestedScrollConnection.

4️⃣ Используйте CompositionLocal для тематического поведения

Вместо глубокой передачи параметров используйте CompositionLocal для обмена такими значениями, как интервал или предпочтения пользователя.

val LocalSpacing = compositionLocalOf { 0.dp }
CompositionLocalProvider(LocalSpacing provides 8.dp) {
MyComposable()
}
@Composable
fun MyComposable() {
val spacing = LocalSpacing.current
Spacer(modifier = Modifier.height(spacing))
}


Идеально подходит для согласования таких элементов дизайна, как интервалы, цвета или размеры шрифтов в больших кодовых базах.

5️⃣ Используйте Modifier.graphicsLayer для создания эффектов

graphicsLayer предоставляет вам низкоуровневый контроль для применения таких эффектов, как вращение, масштабирование или альфа-канал, прямо на GPU.

Modifier.graphicsLayer {
rotationZ = 15f
scaleX = 1.2f
alpha = 0.8f
}


Используйте с осторожностью: эти эффекты хорошо работают на графических процессорах, но проверяйте производительность на устройствах более низкого класса.

Делитесь в комментариях лайфхаками, которыми вы пользуетесь 💬

🐸 Библиотека мобильного разработчика

#буст
Please open Telegram to view this post
VIEW IN TELEGRAM
2025/06/13 09:49:36
Back to Top
HTML Embed Code: